VOCAL MELODY EXTRACTION USING PATCH-BASED CNN
2023/5/10
https://scrapbox.io/files/645af1a6b16e6b72f4d45067.png
論文リンク
文献情報
VOCAL MELODY EXTRACTION USING PATCH-BASED CNN
Li Su
ICASSP 2018
要は何?
CNNを用いて,混合音中のボーカルメロディの音高を推定するVocal melody extractionを解く.
問題意識と解決策
混合音中のMelody extractionはMIRの長年の課題.
混合音からメロディを混同することなく抽出し音高を推定するのは難しい
これまで(当時)は信号処理のテクニックを駆使してきた(salience representation等)
これを画像識別として解くことを考えられれば,精度をあげることが期待できそう.
特に,画像の物体検出のアナロジーはMelody extractionに適用可能(メロディがある場所を特定する,メロディと非メロディを識別する等)で,(当時SoTAだった)R-CNNをインスパイアし,ボーカル音高の存在範囲に集中して検出を行えるとよさそう.(Region proposalライクに)
しかし,音の2次元時間周波数表現=スペクトログラムは調波構造を持つためにこの方策で用いるのは難しい.
そこで,調波構造をキャンセルした2次元時間周波数表現であるCFPを用いる.
CFP に対してR-CNNライクにパッチを用いて,各時間フレームのメロディ・メロディでないの識別を行う.
手法
CFP(combined frequency and periodicity)
https://scrapbox.io/files/645b051a33b926d603dbb476.png
時間周波数表現のなかで調波音は基本周波数$ f_o, ハーモニクス$ nf_o, サブハーモニクス$ f_o /nによって表現される.
入力信号のSTFT振幅スペクトログラムを$ Xとする.
CFP表現は以下のコンポーネントを持ち,それぞれの数式は
(強調)スペクトログラム$ Z_0[k,n]:= \sigma_0(W_fX)
GC(Generalized Cepstrum)$ Z_1[q,n]:= \sigma_1(W_tF^{-1}Z_0)
GCoS(Generalized Cepstrum of Spectrum)$ Z_2[k,n]:= \sigma_2(W_fFZ_1)
ここで,$ F:DFT行列,$ W_f, W_t:ハイパスフィルタ$ \sigma_n活性化関数
スペクトログラムである$ Z_0, Z_2のインデックスkは 周波数,ケプストラムである$ Z_1のインデックスqはケフレンシー.
活性化関数$ \sigma_n = |ReLU(Z_n)|^{\gamma_i}は,ReLUのあとにハイパーパラメータ$ \gammaによるルートをとる.
ハイパスフィルタはそれぞれ対角行列で表現され,カットオフ周波数$ k_cとカットオフケフレンシー$ q_cをもつ.
https://scrapbox.io/files/645afdc9a779e2d91dc41509.png
$ Z_1と$ Z_2の結合によって,ハーモニクスとサブハーモニクスを抑制することができる.
メロディを扱うため,結合前にそれぞれの周波数軸($ Z_1はケフレンシーから周波数軸に直してから)を対数周波数軸に直す.具体的には,80-800Hzに,48バンド/オクターブとなるように159個の三角フィルタバンクを適用する.(適用後をそれぞれ$ \tilde{Z}_1,\tilde{Z}_2とする)
結合は,単に積をとるだけ
$ Y[p,n] = \tilde{Z}_1[p,n] \tilde{Z}_2[p,n]
yamamoto.icon このアイデアは,基本周波数であれば,周波数表現と時間表現(ラグ表現?)でピークの出る箇所が一致するというアイデアを利用しているよう.(図はSu et al. Combining Spectral and Temporal Representations for Multipitch Estimation of Polyphonic Music (TASLP2015)より.)
https://scrapbox.io/files/645b006b6d0c877d0df1e4d3.png
ここで実際の歌声のスペクトログラム(左上),GC(右上),GCos(左中),CFP(右中)を見てみる.
https://scrapbox.io/files/645af85b06c2975ea54f253a.png
スペクトログラムをみると,基本周波数の成分は弱く,むしろフォルマントとなる高周波帯にエネルギーが集中して現れている.
逆にGCに変換すれば,サブハーモニクスに高い成分が現れる.
GCosはGCにかけたハイパスフィルタによって,GCに現れたサブハーモニクスを打ち消してこのエネルギーの比率を「再精製」している.
GCとGCosの積をとれば,メロディか伴奏の基本周波数以外を抑制したCFPが得られる.
Patch selection
https://scrapbox.io/files/645b08414984a13d0d9dd4dd.png
CFPのピークに対し,ピークを中心とする25x25(=0.5秒,6.25半音)の領域をパッチとして抽出
パッチに対して図のようなCNNを適用し,そのパッチ中心がメロディかどうかで2値分類する
non-melodyとのimbalanceを避けるため10%の非メロディのピークも学習に加えた.
閾値は0.5を設定
実験とその結果
ここで,まず本論文の条件
CFP-Max: 単純にCFP表現のうちピーク周波数のargmaxをとる(non vocal判定なし)
CNN-MaxIn: CNNメロディ判定確率が0.5以上だったもののうち,CFPのピーク周波数のargmaxをとる
CNN-MaxOut: CNNメロディ判定確率が最大の周波数を選ぶ
比較条件
MCDNN: CNN + HMM(Kum et al.)
Deep salience (Bittner et al.) 閾値0.3と0.1
学習データ:
MIR-1k
800クリップの最初の3秒
テストデータ
ADC2004 vocal
MIREX 2005 vocal
iKala
Medley DB
https://scrapbox.io/files/645b07c56e0c0fe1d70bb9c1.png
コメント
CFPは本当にうまいアイデアだとしみじみ思う.
ただ,後続の歌声採譜のVocanoなんかはvocal separationを入れてる.CFPだけでは伴奏の影響を除去しきれないとは思う.(オクターブエラーを防ぐにはもってこいだと思うが)
ただ,バックエンドの識別器はこれでいいのか感.時代を感じた.
歌声のf0概形にカーブが多く,伴奏(=楽器音)のそれには直線が多いということを暗に仮定していると思った.
位置情報とか,他のパッチとの相対位置とかを入れるともっと精度が上がりそうな気がした.
後続もCRNNを適用したりTransformerを適用したりしている.
MIR-1kとikalaはもうexpireしてダウンロードができない(・〜・)